// 关系型数据依赖
import distributedKVStore from '@ohos.data.distributedKVStore';

// 键值性数据依赖
import relationalStore from '@ohos.data.relationalStore';

// 自行定义的一些SQL语句
import { PRODUCT_SQL_CREATE } from '../constants/TableConst'
import { STORE_SQL_CREATE } from '../constants/TableConst'
import { ORDERGOODS_SQL_CREATE } from '../constants/TableConst'
import { TABLEORDER_SQL_CREATE } from '../constants/TableConst'


/**
 * 创建数据库初始化的工具，一辈子只能用一次。
 */
export default class DatabaseUtil {

  /**
   * 关系型数据库
   */
  public static dbs: relationalStore.RdbStore;


  /**
   * 键值型数据库管理器
   */
  public static KVDBManager: distributedKVStore.KVManager;

  /**
   * 初始化数据库dbs
   */
  public static init(context) {
    this.initDBS(context);
    this.initKVDBManager(context);
  }

  /**
   * 初始化键值型数据库
   * @param context
   */
  public static initKVDBManager(context) {

    const kvManagerConfig = {
      context: context,
      bundleName: 'com.example.datamanagertest'
    };
    try {
      // 创建KVManager实例
      this.KVDBManager = distributedKVStore.createKVManager(kvManagerConfig);
      console.info('Succeeded in creating KVManager.');
      // 继续创建获取数据库
    } catch (e) {
      console.error(`Failed to create KVManager. Code:${e.code},message:${e.message}`);
    }

  }

  /**
   * 初始化关系型数据库。
   * @param context
   */
  private static initDBS(context) {

    const STORE_CONFIG = {
      name: 'RdbStore.db', // 数据库名
      securityLevel: relationalStore.SecurityLevel.S1 // 数据库安全级别
    };

    relationalStore.getRdbStore(context, STORE_CONFIG, (err, store) => {
      if (err) {
        console.error(`Failed to get RdbStore. Code:${err.code}, message:${err.message}`);
        return;
      }
      console.info(`Succeeded in getting RdbStore.`);

      store.executeSql(PRODUCT_SQL_CREATE); // 创建数据表 product
      store.executeSql(STORE_SQL_CREATE); // 创建数据表 store
      store.executeSql(ORDERGOODS_SQL_CREATE); // 创建数据表 orderGoods
      store.executeSql(TABLEORDER_SQL_CREATE); // 创建数据表 order

      this.dbs = store;
    });
  }
}

